export default Ember.Component.extend({
  classNames: ['invite-list'],
  users: null,
  inviteEmail: '',
  inviteRole: '',
  invalid: false,

  init() {
    this._super();
    this.set('users', []);

    this.set('roles', [
      {id: 'moderator', label: I18n.t('wizard.invites.roles.moderator') },
      {id: 'regular', label: I18n.t('wizard.invites.roles.regular') },
    ]);

    this.updateField();
  },

  keyPress(e) {
    if (e.keyCode === 13) {
      e.preventDefault();
      e.stopPropagation();
      this.send('addUser');
    }
  },

  updateField() {
    const users = this.get('users');

    this.set('field.value', JSON.stringify(users));

    const staffCount = this.get('step.fieldsById.staff_count.value') || 1;
    const showWarning = (staffCount < 3 && users.length === 0);

    this.set('field.warning', showWarning ? 'invites.none_added' : null);
  },

  actions: {
    addUser() {
      const user = {
        email: this.get('inviteEmail') || '',
        role: this.get('inviteRole')
      };

      if (!/(.+)@(.+){2,}\.(.+){2,}/.test(user.email)) {
        return this.set('invalid', true);
      }

      const users = this.get('users');
      if (users.findBy('email', user.email)) {
        return this.set('invalid', true);
      }

      this.set('invalid', false);

      users.pushObject(user);
      this.updateField();

      this.set('inviteEmail', '');
      Ember.run.scheduleOnce('afterRender', () => this.$('.invite-email').focus());
    },

    removeUser(user) {
      this.get('users').removeObject(user);
      this.updateField();
    }
  }
});
